package model

import (
	"errors"
	"gorm.io/gorm"
	"time"
)

type DataUser struct {
	ID            int64  `json:"id" gorm:"id"`
	FtpInfoId     int64  `json:"ftp_info_id" gorm:"ftp_info_id"`     // ftp_info_id
	LogTime       int64  `json:"log_time" gorm:"log_time"`           // log_time
	SteamId       string `json:"steam_id" gorm:"steam_id"`           // 时间
	GameId        int64  `json:"game_id" gorm:"game_id"`             // 游戏id
	GameName      string `json:"game_name" gorm:"game_name"`         // 游戏名称
	BankCrad      string `json:"bank_crad" gorm:"bank_crad"`         // 银行卡号
	Balance       int64  `json:"balance" gorm:"balance"`             // 余额
	Gold          int64  `json:"gold" gorm:"gold"`                   // 金条
	KillNum       int64  `json:"kill_num" gorm:"kill_num"`           // 击杀人数
	LoginTime     int64  `json:"login_time" gorm:"login_time"`       // 登录时间
	OfflineTime   int64  `json:"offline_time" gorm:"offline_time"`   // 离线时间
	OnlineLong    int64  `json:"online_long" gorm:"online_long"`     // 在线时长
	OnlineStatus  int64  `json:"online_status" gorm:"online_status"` // 在线状态
	EconnomyTime  int64  `json:"econnomy_time" gorm:"econnomy_time"` // 经济日志数据更新时间
	RegTime       int64  `json:"reg_time" gorm:"reg_time"`           // 注册时间
	UpdatedAt     int64  `json:"updated_at" gorm:"updated_at"`       // 修改时间
	CreatedAt     int64  `json:"created_at" gorm:"created_at"`       // 添加时间
	CreatedStatus bool   `json:"CreatedStatus" gorm:"-"`             //数据是否新增的状态 不映射数据库表
	UpdatedStatus bool   `json:"CreatedStatus" gorm:"-"`             //数据修改状态

}

func (DataUser) TableName() string {
	return "sm_data_user"
}

func (u DataUser) BeforeUpdate(tx *gorm.DB) (err error) {
	now := time.Now()
	unixTime := now.Unix()
	u.UpdatedAt = unixTime
	u.CreatedAt = unixTime
	return nil
}

type DataUserM struct {
	DB *gorm.DB
}

func NewDataUserM() *DataUserM {
	return &DataUserM{
		GetDB(),
	}
}

// 获取用户列表
func (p *DataUserM) GetUserList(ftpInfoId int64) []DataUser {
	var data []DataUser
	result := p.DB.Model(DataUser{}).Where("ftp_info_id = ?", ftpInfoId).Order("login_time desc").Find(&data)

	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 没有找到记录
			return data
		} else {
			panic(result.Error)
			// 真正的执行错误

		}
	}
	//fmt.Print("条数", result.RowsAffected)
	//fmt.Print("info", info)
	return data
}

func (p *DataUserM) InsertUserData(DataArr []DataUser) bool {

	result := p.DB.Omit("id").CreateInBatches(DataArr, 1000)

	if result.Error != nil {
		panic(result.Error)
	}
	return true
}

// 批量更新
func (p *DataUserM) UpdateUserData(ftpInfoId int64, DataArr []DataUser) bool {
	for _, Data := range DataArr {
		result := p.DB.Model(DataUser{}).Where("ftp_info_id = ? and steam_id = ?", ftpInfoId, Data.SteamId).
			Updates(map[string]interface{}{"online_status": Data.OnlineStatus, "login_time": Data.LoginTime, "offline_time": Data.OfflineTime, "bank_crad": Data.BankCrad, "balance": Data.Balance, "gold": Data.Gold, "econnomy_time": Data.EconnomyTime, "game_name": Data.GameName})
		if result.Error != nil {
			panic(result.Error)
		}
	}

	return true
}
